import { Component, OnInit } from '@angular/core';

import { NzMessageService } from 'ng-zorro-antd/message';

import { AppHomeBannerService } from './app-home-banner.service';
import {PermissionService} from '../../../service/permission.service';

@Component({
  selector: 'app-home-banner',
  templateUrl: './app-home-banner.component.html',
  styleUrls: ['./app-home-banner.component.scss']
})
export class AppHomeBannerComponent implements OnInit {

  /**
   * 查询参数格式
   */
  queryForm: any = {
    // 状态：0 未开始  1 进行中 2 已结束
    status: '',
    // 当前页码
    page: 1,
    // 分页大小
    pageSize: 10,
  }

  // 弹出 原始对象 元数据
  modalFormOriginal = {
    // 类型 1.链接 2.商品 3.搜索词 4.第三级分类
    type: '',
    // banner图
    bannerPicUrl: '',
    // 跳转 链接
    bannerUrl: '',
    // 是否要登录 0:否1:是
    loginFlag: '',
    // 备注
    bak: '',
    // banner 开始时间
    beginTime: '',
    // banner 结束时间
    endTime: '',
    // 创建人
    createUser: '',
    // 最后修改人
    updateUser: '',
    // 创建时间
    createTime: '',
    // 最后更新时间
    updateTime: '',
    // 名称
    bannerName: ''
  }
  // 新增弹窗对象
  modalForm: any = {}
  /**
   * 表单load加载
   */
  tableLoading: any = false;
  // 列表数据
  tableData: any = {
    // 数据列表集合
    records: [],
    // 总条数
    total: 0
  }
  isModalShow: boolean = false

  /**
   * 全局 loading
   */
  messageId: any = null;

  // 防止重复上传
  forbidUpload: boolean = false

  // 定时器
  time: any = null

  // 缓存
  cacheData: any = {}
  // 状态集合
  statusSet: any = { 0: '未开始', 1: '进行中', 3: '已结束' }

  // 图片、链接、状态集合
  contentList: any = []
  // 跳转方式 1.商品id 2.链接 3.搜索词 4.分类（2021/7/28）
  typeSet: any = { 1: '商品id', 2: '链接', 3: '搜索词', 4: '分类' }
  // 是否要登录0:否1:是
  loginSet: any = { 0: '不需要登录', 1: '需要登录' }

  constructor(
    private AppHomeBannerService: AppHomeBannerService,
    private message: NzMessageService,
    public permission: PermissionService,
  ) { }

  ngOnInit() {
    this.httpList()
  }

  // 查询列表
  onQuery() {
    this.queryForm.pageNum = 1
    this.httpList()
  }


  // 列表删除 status 2
  onTableDelete(item: any) {
    const { id } = item
    const params = { id, status: 2 }
    this.httpDelete(params)
  }
  // 上移和下移
  onTableMove(item: any, type: string) {
    const { id } = item
    const params = { id, type }
    this.httpMove(params)
  }
  // 编辑
  onTableEdit(item: any) {
    const { id, bannerName, bannerPicUrl, type, bannerUrl, loginFlag, beginTime, endTime, bak } = item
    this.modalForm = { id, bannerName, bannerPicUrl, type: `${type}`, bannerUrl, loginFlag: `${loginFlag}`, beginTime, endTime, bak }
    this.isModalShow = true
  }

  /**
   * 页码改变
   * @param index 页码数
   */
  onPageIndexChange(index: Number) {
    this.queryForm.page = index;
    this.httpList()
  }
  /**
   * 每页条数改变的回调
   * @param index 页码数
   */
  onPageSizeChange(index: Number) {
    this.queryForm.pageSize = index;
    this.httpList()
  }

  // 活动 新增
  onOpenModalAdd() {
    this.modalForm = { ...this.modalFormOriginal }
    this.isModalShow = true
  }
  // 关闭新增弹窗
  onModalClose() {
    this.isModalShow = false
  }
  // 上传图标和角标的按钮
  onModalPreview(ev: any) {
    const { originFileObj } = ev?.file
    this.httpUpload(originFileObj)
  }
  // 指定商品
  oninputLink(ev: any) {
    const { type } = this.modalForm
    if (type == 1) {
      this.time = setTimeout(() => {
        this.modalForm.bannerUrl = ev.target.value.replace(/[^\d]/g, '')
        clearTimeout(this.time)
      }, 300);

    }
  }
  // 活动 新增 确定提价数据
  async onConfirm() {
    const { id, bannerName, bannerPicUrl, bannerUrl, type, loginFlag, beginTime, endTime } = this.modalForm
    if (!bannerName?.trim()) {
      this.message.warning('请输入名称')
      return
    }
    if (!bannerPicUrl) {
      this.message.warning('请上传图片')
      return
    }
    if (!type) {
      this.message.warning('请选择跳转方式')
      return
    }
    if (!bannerUrl?.trim()) {
      this.message.warning(`请输入${this.typeSet[this.modalForm.type] || '链接'}`)
      return
    }
    if (!loginFlag) {
      this.message.warning('请选择登录方式')
      return
    }
    if (!beginTime) {
      this.message.warning('请选择开始时间')
      return
    }
    if (!endTime) {
      this.message.warning('请选择结束时间')
      return
    }
    if (new Date(beginTime).getTime() > new Date(endTime).getTime()) {
      this.message.warning('开始时间不能大于结束时间')
      return
    }
    let isSuccess = null
    if (id) {
      // 编辑
      isSuccess = await this.httpUpdate()
    } else {
      // 新增保存
      isSuccess = await this.httpSave()
    }
    if (isSuccess) {
      this.isModalShow = false // 关闭弹窗
    }

  }
  /**
    * 查询列表
    * @returns
  */
  async httpList() {
    this.createBasicMessage()
    try {
      const { data }: any = await this.AppHomeBannerService.getList(this.queryForm)
      if (data) {
        this.tableData = data
      }
      this.removeBasicMessage()
    } catch (error) {
      this.removeBasicMessage()
    }
  }
  /**
   * 提交新增弹窗的数据
   * @returns
  */
  async httpSave() {
    try {
      const { message }: any = await this.AppHomeBannerService.save(this.modalForm)
      message && this.message.success(message)
      if (message == 'success') {
        this.time = setTimeout(() => {
          this.queryForm.pageNum = 1
          this.httpList() // 成功刷新列表
          clearTimeout(this.time)
        }, 500);
      }
      return message == 'success'
    } catch (error) {
      console.log(error, 'error')
      return false;

    }
  }
  /**
  * 编辑弹窗的数据
  * @returns
  */
  async httpUpdate() {
    try {
      const { message }: any = await this.AppHomeBannerService.update(this.modalForm)
      message && this.message.success(message)
      if (message == 'success') {
        this.time = setTimeout(() => {
          this.httpList() // 成功刷新列表
          clearTimeout(this.time)
        }, 500);
      }
      return message == 'success'
    } catch (error) {
      console.log(error, 'error')
      return false;

    }
  }
  /**
    * 删除列表数据
    * @returns
   */
  async httpDelete(params: any) {
    if (!params) {
      return
    }
    try {
      const { message }: any = await this.AppHomeBannerService.delete(params)
      message && this.message.success(message)
      if (message == 'success') {
        this.time = setTimeout(() => {
          this.httpList() // 成功刷新列表
          clearTimeout(this.time)
        }, 500);
      }
      return message == 'success'
    } catch (error) {
      console.log(error, 'error')
      return false;

    }
  }
  /**
    * 上移和下移 数据
    * @returns
   */
  async httpMove(params: any) {
    if (!params) {
      return
    }
    try {
      const { message }: any = await this.AppHomeBannerService.move(params)
      message && this.message.success(message)
      if (message == 'success') {
        this.time = setTimeout(() => {
          this.httpList() // 成功刷新列表
          clearTimeout(this.time)
        }, 500);
      }
      return message == 'success'
    } catch (error) {
      console.log(error, 'error')
      return false;

    }
  }
  /**
   * 图片 上传
   * @returns
  */
  async httpUpload(originFileObj: any) {
    if (!originFileObj || this.forbidUpload) { // 禁止 重复上传
      return
    }
    this.forbidUpload = true
    try {
      const { data }: any = await this.AppHomeBannerService.httpPostFile(originFileObj)
      this.modalForm.bannerPicUrl = data
      this.forbidUpload = false
      data && this.message.success('图片上传成功')
    } catch (error) {
      this.forbidUpload = false
      this.message.warning('图片上传失败，请重新选取上传')
    }
  }
  // table状态字段code转换成中文
  status_to_text(val: number) {
    return this.statusSet[val] || '-'
  }
  // 类型 1.链接 2.商品 3.搜索词 4.第三级分类
  type_to_text(val: number) {
    return this.typeSet[val] || '-'
  }
  // 是否要登录0:否1:是
  login_to_text(val: number) {
    return this.loginSet[val] || '-'
  }
  /**
  * 时间格式转换 年月日
  * @param date
  * @returns
  */
  date(date: any) {
    const d = new Date(date)
    return `${d.getFullYear()}-${this.p((d.getMonth() + 1))}-${this.p(d.getDate())} ${this.p(d.getHours())}:${this.p(d.getMinutes())}:${this.p(d.getSeconds())}`;
  }
  /**
   * 补0
   * @param s
   */
  p(s: any) {
    return s < 10 ? '0' + s : s
  }

  /**
   * 开启loading
   */
  createBasicMessage(): void {
    this.messageId = this.message.loading('正在请求...', { nzDuration: 0 }).messageId;
  }
  /**
   * 移除loading
   */
  removeBasicMessage() {
    this.message.remove(this.messageId);
    this.messageId = null;
  }
  /**
  * 全局展示操作反馈信息
  * @param type 其他提示类型 success:成功 error:失败 warning:警告
  */
  createMessage(type: any, str: any): void {
    this.message.create(type, str);
  }
}
